Home | History | Annotate | Download | only in sound
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  * Copyright (C) 2012 Samsung Electronics
      4  * R. Chandrasekar <rcsekar (at) samsung.com>
      5  */
      6 #include <common.h>
      7 #include <asm/arch/clk.h>
      8 #include <asm/arch/cpu.h>
      9 #include <asm/gpio.h>
     10 #include <asm/io.h>
     11 #include <div64.h>
     12 #include <fdtdec.h>
     13 #include <i2c.h>
     14 #include <i2s.h>
     15 #include <sound.h>
     16 #include <asm/arch/sound.h>
     17 #include "wm8994.h"
     18 #include "wm8994_registers.h"
     19 
     20 /* defines for wm8994 system clock selection */
     21 #define SEL_MCLK1	0x00
     22 #define SEL_MCLK2	0x08
     23 #define SEL_FLL1	0x10
     24 #define SEL_FLL2	0x18
     25 
     26 /* fll config to configure fll */
     27 struct wm8994_fll_config {
     28 	int src;	/* Source */
     29 	int in;		/* Input frequency in Hz */
     30 	int out;	/* output frequency in Hz */
     31 };
     32 
     33 /* codec private data */
     34 struct wm8994_priv {
     35 	enum wm8994_type type;		/* codec type of wolfson */
     36 	int revision;			/* Revision */
     37 	int sysclk[WM8994_MAX_AIF];	/* System clock frequency in Hz  */
     38 	int mclk[WM8994_MAX_AIF];	/* master clock frequency in Hz */
     39 	int aifclk[WM8994_MAX_AIF];	/* audio interface clock in Hz   */
     40 	struct wm8994_fll_config fll[2]; /* fll config to configure fll */
     41 };
     42 
     43 /* wm 8994 supported sampling rate values */
     44 static unsigned int src_rate[] = {
     45 			 8000, 11025, 12000, 16000, 22050, 24000,
     46 			 32000, 44100, 48000, 88200, 96000
     47 };
     48 
     49 /* op clock divisions */
     50 static int opclk_divs[] = { 10, 20, 30, 40, 55, 60, 80, 120, 160 };
     51 
     52 /* lr clock frame size ratio */
     53 static int fs_ratios[] = {
     54 	64, 128, 192, 256, 348, 512, 768, 1024, 1408, 1536
     55 };
     56 
     57 /* bit clock divisors */
     58 static int bclk_divs[] = {
     59 	10, 15, 20, 30, 40, 50, 60, 80, 110, 120, 160, 220, 240, 320, 440, 480,
     60 	640, 880, 960, 1280, 1760, 1920
     61 };
     62 
     63 static struct wm8994_priv g_wm8994_info;
     64 static unsigned char g_wm8994_i2c_dev_addr;
     65 static struct sound_codec_info g_codec_info;
     66 
     67 /*
     68  * Initialise I2C for wm 8994
     69  *
     70  * @param bus no	i2c bus number in which wm8994 is connected
     71  */
     72 static void wm8994_i2c_init(int bus_no)
     73 {
     74 	i2c_set_bus_num(bus_no);
     75 }
     76 
     77 /*
     78  * Writes value to a device register through i2c
     79  *
     80  * @param reg	reg number to be write
     81  * @param data	data to be writen to the above registor
     82  *
     83  * @return	int value 1 for change, 0 for no change or negative error code.
     84  */
     85 static int wm8994_i2c_write(unsigned int reg, unsigned short data)
     86 {
     87 	unsigned char val[2];
     88 
     89 	val[0] = (unsigned char)((data >> 8) & 0xff);
     90 	val[1] = (unsigned char)(data & 0xff);
     91 	debug("Write Addr : 0x%04X, Data :  0x%04X\n", reg, data);
     92 
     93 	return i2c_write(g_wm8994_i2c_dev_addr, reg, 2, val, 2);
     94 }
     95 
     96 /*
     97  * Read a value from a device register through i2c
     98  *
     99  * @param reg	reg number to be read
    100  * @param data	address of read data to be stored
    101  *
    102  * @return	int value 0 for success, -1 in case of error.
    103  */
    104 static unsigned int  wm8994_i2c_read(unsigned int reg , unsigned short *data)
    105 {
    106 	unsigned char val[2];
    107 	int ret;
    108 
    109 	ret = i2c_read(g_wm8994_i2c_dev_addr, reg, 2, val, 2);
    110 	if (ret != 0) {
    111 		debug("%s: Error while reading register %#04x\n",
    112 		      __func__, reg);
    113 		return -1;
    114 	}
    115 
    116 	*data = val[0];
    117 	*data <<= 8;
    118 	*data |= val[1];
    119 
    120 	return 0;
    121 }
    122 
    123 /*
    124  * update device register bits through i2c
    125  *
    126  * @param reg	codec register
    127  * @param mask	register mask
    128  * @param value	new value
    129  *
    130  * @return int value 1 if change in the register value,
    131  * 0 for no change or negative error code.
    132  */
    133 static int wm8994_update_bits(unsigned int reg, unsigned short mask,
    134 						unsigned short value)
    135 {
    136 	int change , ret = 0;
    137 	unsigned short old, new;
    138 
    139 	if (wm8994_i2c_read(reg, &old) != 0)
    140 		return -1;
    141 	new = (old & ~mask) | (value & mask);
    142 	change  = (old != new) ? 1 : 0;
    143 	if (change)
    144 		ret = wm8994_i2c_write(reg, new);
    145 	if (ret < 0)
    146 		return ret;
    147 
    148 	return change;
    149 }
    150 
    151 /*
    152  * Sets i2s set format
    153  *
    154  * @param aif_id	Interface ID
    155  * @param fmt		i2S format
    156  *
    157  * @return -1 for error and 0  Success.
    158  */
    159 int wm8994_set_fmt(int aif_id, unsigned int fmt)
    160 {
    161 	int ms_reg;
    162 	int aif_reg;
    163 	int ms = 0;
    164 	int aif = 0;
    165 	int aif_clk = 0;
    166 	int error = 0;
    167 
    168 	switch (aif_id) {
    169 	case 1:
    170 		ms_reg = WM8994_AIF1_MASTER_SLAVE;
    171 		aif_reg = WM8994_AIF1_CONTROL_1;
    172 		aif_clk = WM8994_AIF1_CLOCKING_1;
    173 		break;
    174 	case 2:
    175 		ms_reg = WM8994_AIF2_MASTER_SLAVE;
    176 		aif_reg = WM8994_AIF2_CONTROL_1;
    177 		aif_clk = WM8994_AIF2_CLOCKING_1;
    178 		break;
    179 	default:
    180 		debug("%s: Invalid audio interface selection\n", __func__);
    181 		return -1;
    182 	}
    183 
    184 	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
    185 	case SND_SOC_DAIFMT_CBS_CFS:
    186 		break;
    187 	case SND_SOC_DAIFMT_CBM_CFM:
    188 		ms = WM8994_AIF1_MSTR;
    189 		break;
    190 	default:
    191 		debug("%s: Invalid i2s master selection\n", __func__);
    192 		return -1;
    193 	}
    194 
    195 	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
    196 	case SND_SOC_DAIFMT_DSP_B:
    197 		aif |= WM8994_AIF1_LRCLK_INV;
    198 	case SND_SOC_DAIFMT_DSP_A:
    199 		aif |= 0x18;
    200 		break;
    201 	case SND_SOC_DAIFMT_I2S:
    202 		aif |= 0x10;
    203 		break;
    204 	case SND_SOC_DAIFMT_RIGHT_J:
    205 		break;
    206 	case SND_SOC_DAIFMT_LEFT_J:
    207 		aif |= 0x8;
    208 		break;
    209 	default:
    210 		debug("%s: Invalid i2s format selection\n", __func__);
    211 		return -1;
    212 	}
    213 
    214 	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
    215 	case SND_SOC_DAIFMT_DSP_A:
    216 	case SND_SOC_DAIFMT_DSP_B:
    217 		/* frame inversion not valid for DSP modes */
    218 		switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
    219 		case SND_SOC_DAIFMT_NB_NF:
    220 			break;
    221 		case SND_SOC_DAIFMT_IB_NF:
    222 			aif |= WM8994_AIF1_BCLK_INV;
    223 			break;
    224 		default:
    225 			debug("%s: Invalid i2s frame inverse selection\n",
    226 			      __func__);
    227 			return -1;
    228 		}
    229 		break;
    230 
    231 	case SND_SOC_DAIFMT_I2S:
    232 	case SND_SOC_DAIFMT_RIGHT_J:
    233 	case SND_SOC_DAIFMT_LEFT_J:
    234 		switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
    235 		case SND_SOC_DAIFMT_NB_NF:
    236 			break;
    237 		case SND_SOC_DAIFMT_IB_IF:
    238 			aif |= WM8994_AIF1_BCLK_INV | WM8994_AIF1_LRCLK_INV;
    239 			break;
    240 		case SND_SOC_DAIFMT_IB_NF:
    241 			aif |= WM8994_AIF1_BCLK_INV;
    242 			break;
    243 		case SND_SOC_DAIFMT_NB_IF:
    244 			aif |= WM8994_AIF1_LRCLK_INV;
    245 			break;
    246 		default:
    247 			debug("%s: Invalid i2s clock polarity selection\n",
    248 			      __func__);
    249 			return -1;
    250 		}
    251 		break;
    252 	default:
    253 		debug("%s: Invalid i2s format selection\n", __func__);
    254 		return -1;
    255 	}
    256 
    257 	error = wm8994_update_bits(aif_reg, WM8994_AIF1_BCLK_INV |
    258 			WM8994_AIF1_LRCLK_INV_MASK | WM8994_AIF1_FMT_MASK, aif);
    259 
    260 	error |= wm8994_update_bits(ms_reg, WM8994_AIF1_MSTR_MASK, ms);
    261 	error |= wm8994_update_bits(aif_clk, WM8994_AIF1CLK_ENA_MASK,
    262 						WM8994_AIF1CLK_ENA);
    263 	if (error < 0) {
    264 		debug("%s: codec register access error\n", __func__);
    265 		return -1;
    266 	}
    267 
    268 	return 0;
    269 }
    270 
    271 /*
    272  * Sets hw params FOR WM8994
    273  *
    274  * @param wm8994		wm8994 information pointer
    275  * @param aif_id		Audio interface ID
    276  * @param sampling_rate		Sampling rate
    277  * @param bits_per_sample	Bits per sample
    278  * @param Channels		Channels in the given audio input
    279  *
    280  * @return -1 for error  and 0  Success.
    281  */
    282 static int wm8994_hw_params(struct wm8994_priv *wm8994, int aif_id,
    283 		unsigned int sampling_rate, unsigned int bits_per_sample,
    284 		unsigned int channels)
    285 {
    286 	int aif1_reg;
    287 	int aif2_reg;
    288 	int bclk_reg;
    289 	int bclk = 0;
    290 	int rate_reg;
    291 	int aif1 = 0;
    292 	int aif2 = 0;
    293 	int rate_val = 0;
    294 	int id = aif_id - 1;
    295 	int i, cur_val, best_val, bclk_rate, best;
    296 	unsigned short reg_data;
    297 	int ret = 0;
    298 
    299 	switch (aif_id) {
    300 	case 1:
    301 		aif1_reg = WM8994_AIF1_CONTROL_1;
    302 		aif2_reg = WM8994_AIF1_CONTROL_2;
    303 		bclk_reg = WM8994_AIF1_BCLK;
    304 		rate_reg = WM8994_AIF1_RATE;
    305 		break;
    306 	case 2:
    307 		aif1_reg = WM8994_AIF2_CONTROL_1;
    308 		aif2_reg = WM8994_AIF2_CONTROL_2;
    309 		bclk_reg = WM8994_AIF2_BCLK;
    310 		rate_reg = WM8994_AIF2_RATE;
    311 		break;
    312 	default:
    313 		return -1;
    314 	}
    315 
    316 	bclk_rate = sampling_rate * 32;
    317 	switch (bits_per_sample) {
    318 	case 16:
    319 		bclk_rate *= 16;
    320 		break;
    321 	case 20:
    322 		bclk_rate *= 20;
    323 		aif1 |= 0x20;
    324 		break;
    325 	case 24:
    326 		bclk_rate *= 24;
    327 		aif1 |= 0x40;
    328 		break;
    329 	case 32:
    330 		bclk_rate *= 32;
    331 		aif1 |= 0x60;
    332 		break;
    333 	default:
    334 		return -1;
    335 	}
    336 
    337 	/* Try to find an appropriate sample rate; look for an exact match. */
    338 	for (i = 0; i < ARRAY_SIZE(src_rate); i++)
    339 		if (src_rate[i] == sampling_rate)
    340 			break;
    341 
    342 	if (i == ARRAY_SIZE(src_rate)) {
    343 		debug("%s: Could not get the best matching samplingrate\n",
    344 		      __func__);
    345 		return -1;
    346 	}
    347 
    348 	rate_val |= i << WM8994_AIF1_SR_SHIFT;
    349 
    350 	/* AIFCLK/fs ratio; look for a close match in either direction */
    351 	best = 0;
    352 	best_val = abs((fs_ratios[0] * sampling_rate)
    353 						- wm8994->aifclk[id]);
    354 
    355 	for (i = 1; i < ARRAY_SIZE(fs_ratios); i++) {
    356 		cur_val = abs((fs_ratios[i] * sampling_rate)
    357 					- wm8994->aifclk[id]);
    358 		if (cur_val >= best_val)
    359 			continue;
    360 		best = i;
    361 		best_val = cur_val;
    362 	}
    363 
    364 	rate_val |= best;
    365 
    366 	/*
    367 	 * We may not get quite the right frequency if using
    368 	 * approximate clocks so look for the closest match that is
    369 	 * higher than the target (we need to ensure that there enough
    370 	 * BCLKs to clock out the samples).
    371 	 */
    372 	best = 0;
    373 	for (i = 0; i < ARRAY_SIZE(bclk_divs); i++) {
    374 		cur_val = (wm8994->aifclk[id] * 10 / bclk_divs[i]) - bclk_rate;
    375 		if (cur_val < 0) /* BCLK table is sorted */
    376 			break;
    377 		best = i;
    378 	}
    379 
    380 	if (i ==  ARRAY_SIZE(bclk_divs)) {
    381 		debug("%s: Could not get the best matching bclk division\n",
    382 		      __func__);
    383 		return -1;
    384 	}
    385 
    386 	bclk_rate = wm8994->aifclk[id] * 10 / bclk_divs[best];
    387 	bclk |= best << WM8994_AIF1_BCLK_DIV_SHIFT;
    388 
    389 	if (wm8994_i2c_read(aif1_reg, &reg_data) != 0) {
    390 		debug("%s: AIF1 register read Failed\n", __func__);
    391 		return -1;
    392 	}
    393 
    394 	if ((channels == 1) && ((reg_data & 0x18) == 0x18))
    395 		aif2 |= WM8994_AIF1_MONO;
    396 
    397 	if (wm8994->aifclk[id] == 0) {
    398 		debug("%s:Audio interface clock not set\n", __func__);
    399 		return -1;
    400 	}
    401 
    402 	ret = wm8994_update_bits(aif1_reg, WM8994_AIF1_WL_MASK, aif1);
    403 	ret |= wm8994_update_bits(aif2_reg, WM8994_AIF1_MONO, aif2);
    404 	ret |= wm8994_update_bits(bclk_reg, WM8994_AIF1_BCLK_DIV_MASK, bclk);
    405 	ret |= wm8994_update_bits(rate_reg, WM8994_AIF1_SR_MASK |
    406 				WM8994_AIF1CLK_RATE_MASK, rate_val);
    407 
    408 	debug("rate vale = %x , bclk val= %x\n", rate_val, bclk);
    409 
    410 	if (ret < 0) {
    411 		debug("%s: codec register access error\n", __func__);
    412 		return -1;
    413 	}
    414 
    415 	return 0;
    416 }
    417 
    418 /*
    419  * Configures Audio interface Clock
    420  *
    421  * @param wm8994	wm8994 information pointer
    422  * @param aif		Audio Interface ID
    423  *
    424  * @return -1 for error  and 0  Success.
    425  */
    426 static int configure_aif_clock(struct wm8994_priv *wm8994, int aif)
    427 {
    428 	int rate;
    429 	int reg1 = 0;
    430 	int offset;
    431 	int ret;
    432 
    433 	/* AIF(1/0) register adress offset calculated */
    434 	if (aif-1)
    435 		offset = 4;
    436 	else
    437 		offset = 0;
    438 
    439 	switch (wm8994->sysclk[aif-1]) {
    440 	case WM8994_SYSCLK_MCLK1:
    441 		reg1 |= SEL_MCLK1;
    442 		rate = wm8994->mclk[0];
    443 		break;
    444 
    445 	case WM8994_SYSCLK_MCLK2:
    446 		reg1 |= SEL_MCLK2;
    447 		rate = wm8994->mclk[1];
    448 		break;
    449 
    450 	case WM8994_SYSCLK_FLL1:
    451 		reg1 |= SEL_FLL1;
    452 		rate = wm8994->fll[0].out;
    453 		break;
    454 
    455 	case WM8994_SYSCLK_FLL2:
    456 		reg1 |= SEL_FLL2;
    457 		rate = wm8994->fll[1].out;
    458 		break;
    459 
    460 	default:
    461 		debug("%s: Invalid input clock selection [%d]\n",
    462 		      __func__, wm8994->sysclk[aif-1]);
    463 		return -1;
    464 	}
    465 
    466 	/* if input clock frequenct is more than 135Mhz then divide */
    467 	if (rate >= WM8994_MAX_INPUT_CLK_FREQ) {
    468 		rate /= 2;
    469 		reg1 |= WM8994_AIF1CLK_DIV;
    470 	}
    471 
    472 	wm8994->aifclk[aif-1] = rate;
    473 
    474 	ret = wm8994_update_bits(WM8994_AIF1_CLOCKING_1 + offset,
    475 				WM8994_AIF1CLK_SRC_MASK | WM8994_AIF1CLK_DIV,
    476 				reg1);
    477 
    478 	if (aif == WM8994_AIF1)
    479 		ret |= wm8994_update_bits(WM8994_CLOCKING_1,
    480 			WM8994_AIF1DSPCLK_ENA_MASK | WM8994_SYSDSPCLK_ENA_MASK,
    481 			WM8994_AIF1DSPCLK_ENA | WM8994_SYSDSPCLK_ENA);
    482 	else if (aif == WM8994_AIF2)
    483 		ret |= wm8994_update_bits(WM8994_CLOCKING_1,
    484 			WM8994_SYSCLK_SRC | WM8994_AIF2DSPCLK_ENA_MASK |
    485 			WM8994_SYSDSPCLK_ENA_MASK, WM8994_SYSCLK_SRC |
    486 			WM8994_AIF2DSPCLK_ENA | WM8994_SYSDSPCLK_ENA);
    487 
    488 	if (ret < 0) {
    489 		debug("%s: codec register access error\n", __func__);
    490 		return -1;
    491 	}
    492 
    493 	return 0;
    494 }
    495 
    496 /*
    497  * Configures Audio interface  for the given frequency
    498  *
    499  * @param wm8994	wm8994 information
    500  * @param aif_id	Audio Interface
    501  * @param clk_id	Input Clock ID
    502  * @param freq		Sampling frequency in Hz
    503  *
    504  * @return -1 for error and 0 success.
    505  */
    506 static int wm8994_set_sysclk(struct wm8994_priv *wm8994, int aif_id,
    507 				int clk_id, unsigned int freq)
    508 {
    509 	int i;
    510 	int ret = 0;
    511 
    512 	wm8994->sysclk[aif_id - 1] = clk_id;
    513 
    514 	switch (clk_id) {
    515 	case WM8994_SYSCLK_MCLK1:
    516 		wm8994->mclk[0] = freq;
    517 		if (aif_id == 2) {
    518 			ret = wm8994_update_bits(WM8994_AIF1_CLOCKING_2 ,
    519 			WM8994_AIF2DAC_DIV_MASK , 0);
    520 		}
    521 		break;
    522 
    523 	case WM8994_SYSCLK_MCLK2:
    524 		/* TODO: Set GPIO AF */
    525 		wm8994->mclk[1] = freq;
    526 		break;
    527 
    528 	case WM8994_SYSCLK_FLL1:
    529 	case WM8994_SYSCLK_FLL2:
    530 		break;
    531 
    532 	case WM8994_SYSCLK_OPCLK:
    533 		/*
    534 		 * Special case - a division (times 10) is given and
    535 		 * no effect on main clocking.
    536 		 */
    537 		if (freq) {
    538 			for (i = 0; i < ARRAY_SIZE(opclk_divs); i++)
    539 				if (opclk_divs[i] == freq)
    540 					break;
    541 			if (i == ARRAY_SIZE(opclk_divs)) {
    542 				debug("%s frequency divisor not found\n",
    543 				      __func__);
    544 				return -1;
    545 			}
    546 			ret = wm8994_update_bits(WM8994_CLOCKING_2,
    547 					    WM8994_OPCLK_DIV_MASK, i);
    548 			ret |= wm8994_update_bits(WM8994_POWER_MANAGEMENT_2,
    549 					    WM8994_OPCLK_ENA, WM8994_OPCLK_ENA);
    550 		} else {
    551 			ret |= wm8994_update_bits(WM8994_POWER_MANAGEMENT_2,
    552 					    WM8994_OPCLK_ENA, 0);
    553 		}
    554 
    555 	default:
    556 		debug("%s Invalid input clock selection [%d]\n",
    557 		      __func__, clk_id);
    558 		return -1;
    559 	}
    560 
    561 	ret |= configure_aif_clock(wm8994, aif_id);
    562 
    563 	if (ret < 0) {
    564 		debug("%s: codec register access error\n", __func__);
    565 		return -1;
    566 	}
    567 
    568 	return 0;
    569 }
    570 
    571 /*
    572  * Initializes Volume for AIF2 to HP path
    573  *
    574  * @returns -1 for error  and 0 Success.
    575  *
    576  */
    577 static int wm8994_init_volume_aif2_dac1(void)
    578 {
    579 	int ret;
    580 
    581 	/* Unmute AIF2DAC */
    582 	ret = wm8994_update_bits(WM8994_AIF2_DAC_FILTERS_1,
    583 			WM8994_AIF2DAC_MUTE_MASK, 0);
    584 
    585 
    586 	ret |= wm8994_update_bits(WM8994_AIF2_DAC_LEFT_VOLUME,
    587 			WM8994_AIF2DAC_VU_MASK | WM8994_AIF2DACL_VOL_MASK,
    588 			WM8994_AIF2DAC_VU | 0xff);
    589 
    590 	ret |= wm8994_update_bits(WM8994_AIF2_DAC_RIGHT_VOLUME,
    591 			WM8994_AIF2DAC_VU_MASK | WM8994_AIF2DACR_VOL_MASK,
    592 			WM8994_AIF2DAC_VU | 0xff);
    593 
    594 
    595 	ret |= wm8994_update_bits(WM8994_DAC1_LEFT_VOLUME,
    596 			WM8994_DAC1_VU_MASK | WM8994_DAC1L_VOL_MASK |
    597 			WM8994_DAC1L_MUTE_MASK, WM8994_DAC1_VU | 0xc0);
    598 
    599 	ret |= wm8994_update_bits(WM8994_DAC1_RIGHT_VOLUME,
    600 			WM8994_DAC1_VU_MASK | WM8994_DAC1R_VOL_MASK |
    601 			WM8994_DAC1R_MUTE_MASK, WM8994_DAC1_VU | 0xc0);
    602 	/* Head Phone Volume */
    603 	ret |= wm8994_i2c_write(WM8994_LEFT_OUTPUT_VOLUME, 0x12D);
    604 	ret |= wm8994_i2c_write(WM8994_RIGHT_OUTPUT_VOLUME, 0x12D);
    605 
    606 	if (ret < 0) {
    607 		debug("%s: codec register access error\n", __func__);
    608 		return -1;
    609 	}
    610 
    611 	return 0;
    612 }
    613 
    614 /*
    615  * Initializes Volume for AIF1 to HP path
    616  *
    617  * @returns -1 for error  and 0 Success.
    618  *
    619  */
    620 static int wm8994_init_volume_aif1_dac1(void)
    621 {
    622 	int ret = 0;
    623 
    624 	/* Unmute AIF1DAC */
    625 	ret |= wm8994_i2c_write(WM8994_AIF1_DAC_FILTERS_1, 0x0000);
    626 
    627 	ret |= wm8994_update_bits(WM8994_DAC1_LEFT_VOLUME,
    628 			WM8994_DAC1_VU_MASK | WM8994_DAC1L_VOL_MASK |
    629 			WM8994_DAC1L_MUTE_MASK, WM8994_DAC1_VU | 0xc0);
    630 
    631 	ret |= wm8994_update_bits(WM8994_DAC1_RIGHT_VOLUME,
    632 			WM8994_DAC1_VU_MASK | WM8994_DAC1R_VOL_MASK |
    633 			WM8994_DAC1R_MUTE_MASK, WM8994_DAC1_VU | 0xc0);
    634 	/* Head Phone Volume */
    635 	ret |= wm8994_i2c_write(WM8994_LEFT_OUTPUT_VOLUME, 0x12D);
    636 	ret |= wm8994_i2c_write(WM8994_RIGHT_OUTPUT_VOLUME, 0x12D);
    637 
    638 	if (ret < 0) {
    639 		debug("%s: codec register access error\n", __func__);
    640 		return -1;
    641 	}
    642 
    643 	return 0;
    644 }
    645 
    646 /*
    647  * Intialise wm8994 codec device
    648  *
    649  * @param wm8994	wm8994 information
    650  *
    651  * @returns -1 for error  and 0 Success.
    652  */
    653 static int wm8994_device_init(struct wm8994_priv *wm8994,
    654 			      enum en_audio_interface aif_id)
    655 {
    656 	const char *devname;
    657 	unsigned short reg_data;
    658 	int ret;
    659 
    660 	wm8994_i2c_write(WM8994_SOFTWARE_RESET, WM8994_SW_RESET);/* Reset */
    661 
    662 	ret = wm8994_i2c_read(WM8994_SOFTWARE_RESET, &reg_data);
    663 	if (ret < 0) {
    664 		debug("Failed to read ID register\n");
    665 		goto err;
    666 	}
    667 
    668 	if (reg_data == WM8994_ID) {
    669 		devname = "WM8994";
    670 		debug("Device registered as type %d\n", wm8994->type);
    671 		wm8994->type = WM8994;
    672 	} else {
    673 		debug("Device is not a WM8994, ID is %x\n", ret);
    674 		ret = -1;
    675 		goto err;
    676 	}
    677 
    678 	ret = wm8994_i2c_read(WM8994_CHIP_REVISION, &reg_data);
    679 	if (ret < 0) {
    680 		debug("Failed to read revision register: %d\n", ret);
    681 		goto err;
    682 	}
    683 	wm8994->revision = reg_data;
    684 	debug("%s revision %c\n", devname, 'A' + wm8994->revision);
    685 
    686 	/* VMID Selection */
    687 	ret |= wm8994_update_bits(WM8994_POWER_MANAGEMENT_1,
    688 			WM8994_VMID_SEL_MASK | WM8994_BIAS_ENA_MASK, 0x3);
    689 
    690 	/* Charge Pump Enable */
    691 	ret |= wm8994_update_bits(WM8994_CHARGE_PUMP_1, WM8994_CP_ENA_MASK,
    692 					WM8994_CP_ENA);
    693 
    694 	/* Head Phone Power Enable */
    695 	ret |= wm8994_update_bits(WM8994_POWER_MANAGEMENT_1,
    696 			WM8994_HPOUT1L_ENA_MASK, WM8994_HPOUT1L_ENA);
    697 
    698 	ret |= wm8994_update_bits(WM8994_POWER_MANAGEMENT_1,
    699 				WM8994_HPOUT1R_ENA_MASK, WM8994_HPOUT1R_ENA);
    700 
    701 	if (aif_id == WM8994_AIF1) {
    702 		ret |= wm8994_i2c_write(WM8994_POWER_MANAGEMENT_2,
    703 					WM8994_TSHUT_ENA | WM8994_MIXINL_ENA |
    704 					WM8994_MIXINR_ENA | WM8994_IN2L_ENA |
    705 					WM8994_IN2R_ENA);
    706 
    707 		ret |= wm8994_i2c_write(WM8994_POWER_MANAGEMENT_4,
    708 					WM8994_ADCL_ENA | WM8994_ADCR_ENA |
    709 					WM8994_AIF1ADC1R_ENA |
    710 					WM8994_AIF1ADC1L_ENA);
    711 
    712 		/* Power enable for AIF1 and DAC1 */
    713 		ret |= wm8994_i2c_write(WM8994_POWER_MANAGEMENT_5,
    714 					WM8994_AIF1DACL_ENA |
    715 					WM8994_AIF1DACR_ENA |
    716 					WM8994_DAC1L_ENA | WM8994_DAC1R_ENA);
    717 	} else if (aif_id == WM8994_AIF2) {
    718 		/* Power enable for AIF2 and DAC1 */
    719 		ret |= wm8994_update_bits(WM8994_POWER_MANAGEMENT_5,
    720 			WM8994_AIF2DACL_ENA_MASK | WM8994_AIF2DACR_ENA_MASK |
    721 			WM8994_DAC1L_ENA_MASK | WM8994_DAC1R_ENA_MASK,
    722 			WM8994_AIF2DACL_ENA | WM8994_AIF2DACR_ENA |
    723 			WM8994_DAC1L_ENA | WM8994_DAC1R_ENA);
    724 	}
    725 	/* Head Phone Initialisation */
    726 	ret |= wm8994_update_bits(WM8994_ANALOGUE_HP_1,
    727 		WM8994_HPOUT1L_DLY_MASK | WM8994_HPOUT1R_DLY_MASK,
    728 		WM8994_HPOUT1L_DLY | WM8994_HPOUT1R_DLY);
    729 
    730 	ret |= wm8994_update_bits(WM8994_DC_SERVO_1,
    731 			WM8994_DCS_ENA_CHAN_0_MASK |
    732 			WM8994_DCS_ENA_CHAN_1_MASK , WM8994_DCS_ENA_CHAN_0 |
    733 			WM8994_DCS_ENA_CHAN_1);
    734 
    735 	ret |= wm8994_update_bits(WM8994_ANALOGUE_HP_1,
    736 			WM8994_HPOUT1L_DLY_MASK |
    737 			WM8994_HPOUT1R_DLY_MASK | WM8994_HPOUT1L_OUTP_MASK |
    738 			WM8994_HPOUT1R_OUTP_MASK |
    739 			WM8994_HPOUT1L_RMV_SHORT_MASK |
    740 			WM8994_HPOUT1R_RMV_SHORT_MASK, WM8994_HPOUT1L_DLY |
    741 			WM8994_HPOUT1R_DLY | WM8994_HPOUT1L_OUTP |
    742 			WM8994_HPOUT1R_OUTP | WM8994_HPOUT1L_RMV_SHORT |
    743 			WM8994_HPOUT1R_RMV_SHORT);
    744 
    745 	/* MIXER Config DAC1 to HP */
    746 	ret |= wm8994_update_bits(WM8994_OUTPUT_MIXER_1,
    747 			WM8994_DAC1L_TO_HPOUT1L_MASK, WM8994_DAC1L_TO_HPOUT1L);
    748 
    749 	ret |= wm8994_update_bits(WM8994_OUTPUT_MIXER_2,
    750 			WM8994_DAC1R_TO_HPOUT1R_MASK, WM8994_DAC1R_TO_HPOUT1R);
    751 
    752 	if (aif_id == WM8994_AIF1) {
    753 		/* Routing AIF1 to DAC1 */
    754 		ret |= wm8994_i2c_write(WM8994_DAC1_LEFT_MIXER_ROUTING,
    755 				WM8994_AIF1DAC1L_TO_DAC1L);
    756 
    757 		ret |= wm8994_i2c_write(WM8994_DAC1_RIGHT_MIXER_ROUTING,
    758 					WM8994_AIF1DAC1R_TO_DAC1R);
    759 
    760 		/* GPIO Settings for AIF1 */
    761 		ret |=  wm8994_i2c_write(WM8994_GPIO_1, WM8994_GPIO_DIR_OUTPUT
    762 					 | WM8994_GPIO_FUNCTION_I2S_CLK
    763 					 | WM8994_GPIO_INPUT_DEBOUNCE);
    764 
    765 		ret |= wm8994_init_volume_aif1_dac1();
    766 	} else if (aif_id == WM8994_AIF2) {
    767 		/* Routing AIF2 to DAC1 */
    768 		ret |= wm8994_update_bits(WM8994_DAC1_LEFT_MIXER_ROUTING,
    769 				WM8994_AIF2DACL_TO_DAC1L_MASK,
    770 				WM8994_AIF2DACL_TO_DAC1L);
    771 
    772 		ret |= wm8994_update_bits(WM8994_DAC1_RIGHT_MIXER_ROUTING,
    773 				WM8994_AIF2DACR_TO_DAC1R_MASK,
    774 				WM8994_AIF2DACR_TO_DAC1R);
    775 
    776 		/* GPIO Settings for AIF2 */
    777 		/* B CLK */
    778 		ret |= wm8994_update_bits(WM8994_GPIO_3, WM8994_GPIO_DIR_MASK |
    779 					WM8994_GPIO_FUNCTION_MASK ,
    780 					WM8994_GPIO_DIR_OUTPUT);
    781 
    782 		/* LR CLK */
    783 		ret |= wm8994_update_bits(WM8994_GPIO_4, WM8994_GPIO_DIR_MASK |
    784 					WM8994_GPIO_FUNCTION_MASK,
    785 					WM8994_GPIO_DIR_OUTPUT);
    786 
    787 		/* DATA */
    788 		ret |= wm8994_update_bits(WM8994_GPIO_5, WM8994_GPIO_DIR_MASK |
    789 					WM8994_GPIO_FUNCTION_MASK,
    790 					WM8994_GPIO_DIR_OUTPUT);
    791 
    792 		ret |= wm8994_init_volume_aif2_dac1();
    793 	}
    794 
    795 	if (ret < 0)
    796 		goto err;
    797 
    798 	debug("%s: Codec chip init ok\n", __func__);
    799 	return 0;
    800 err:
    801 	debug("%s: Codec chip init error\n", __func__);
    802 	return -1;
    803 }
    804 
    805 /*
    806  * Gets fdt values for wm8994 config parameters
    807  *
    808  * @param pcodec_info	codec information structure
    809  * @param blob		FDT blob
    810  * @return		int value, 0 for success
    811  */
    812 static int get_codec_values(struct sound_codec_info *pcodec_info,
    813 			const void *blob)
    814 {
    815 	int error = 0;
    816 #if CONFIG_IS_ENABLED(OF_CONTROL)
    817 	enum fdt_compat_id compat;
    818 	int node;
    819 	int parent;
    820 
    821 	/* Get the node from FDT for codec */
    822 	node = fdtdec_next_compatible(blob, 0, COMPAT_WOLFSON_WM8994_CODEC);
    823 	if (node <= 0) {
    824 		debug("EXYNOS_SOUND: No node for codec in device tree\n");
    825 		debug("node = %d\n", node);
    826 		return -1;
    827 	}
    828 
    829 	parent = fdt_parent_offset(blob, node);
    830 	if (parent < 0) {
    831 		debug("%s: Cannot find node parent\n", __func__);
    832 		return -1;
    833 	}
    834 
    835 	compat = fdtdec_lookup(blob, parent);
    836 	switch (compat) {
    837 	case COMPAT_SAMSUNG_S3C2440_I2C:
    838 		pcodec_info->i2c_bus = i2c_get_bus_num_fdt(parent);
    839 		error |= pcodec_info->i2c_bus;
    840 		debug("i2c bus = %d\n", pcodec_info->i2c_bus);
    841 		pcodec_info->i2c_dev_addr = fdtdec_get_int(blob, node,
    842 							"reg", 0);
    843 		error |= pcodec_info->i2c_dev_addr;
    844 		debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
    845 		break;
    846 	default:
    847 		debug("%s: Unknown compat id %d\n", __func__, compat);
    848 		return -1;
    849 	}
    850 #else
    851 	pcodec_info->i2c_bus = AUDIO_I2C_BUS;
    852 	pcodec_info->i2c_dev_addr = AUDIO_I2C_REG;
    853 	debug("i2c dev addr = %d\n", pcodec_info->i2c_dev_addr);
    854 #endif
    855 
    856 	pcodec_info->codec_type = CODEC_WM_8994;
    857 
    858 	if (error == -1) {
    859 		debug("fail to get wm8994 codec node properties\n");
    860 		return -1;
    861 	}
    862 
    863 	return 0;
    864 }
    865 
    866 /* WM8994 Device Initialisation */
    867 int wm8994_init(const void *blob, enum en_audio_interface aif_id,
    868 			int sampling_rate, int mclk_freq,
    869 			int bits_per_sample, unsigned int channels)
    870 {
    871 	int ret = 0;
    872 	struct sound_codec_info *pcodec_info = &g_codec_info;
    873 
    874 	/* Get the codec Values */
    875 	if (get_codec_values(pcodec_info, blob) < 0) {
    876 		debug("FDT Codec values failed\n");
    877 		return -1;
    878 	}
    879 
    880 	/* shift the device address by 1 for 7 bit addressing */
    881 	g_wm8994_i2c_dev_addr = pcodec_info->i2c_dev_addr;
    882 	wm8994_i2c_init(pcodec_info->i2c_bus);
    883 
    884 	if (pcodec_info->codec_type == CODEC_WM_8994) {
    885 		g_wm8994_info.type = WM8994;
    886 	} else {
    887 		debug("%s: Codec id [%d] not defined\n", __func__,
    888 		      pcodec_info->codec_type);
    889 		return -1;
    890 	}
    891 
    892 	ret = wm8994_device_init(&g_wm8994_info, aif_id);
    893 	if (ret < 0) {
    894 		debug("%s: wm8994 codec chip init failed\n", __func__);
    895 		return ret;
    896 	}
    897 
    898 	ret =  wm8994_set_sysclk(&g_wm8994_info, aif_id, WM8994_SYSCLK_MCLK1,
    899 							mclk_freq);
    900 	if (ret < 0) {
    901 		debug("%s: wm8994 codec set sys clock failed\n", __func__);
    902 		return ret;
    903 	}
    904 
    905 	ret = wm8994_hw_params(&g_wm8994_info, aif_id, sampling_rate,
    906 						bits_per_sample, channels);
    907 
    908 	if (ret == 0) {
    909 		ret = wm8994_set_fmt(aif_id, SND_SOC_DAIFMT_I2S |
    910 						SND_SOC_DAIFMT_NB_NF |
    911 						SND_SOC_DAIFMT_CBS_CFS);
    912 	}
    913 	return ret;
    914 }
    915