static int max98505_probe(struct snd_soc_codec *codec)
{
	struct max98505_priv *max98505 = snd_soc_codec_get_drvdata(codec);
	struct max98505_cdata *cdata;
	int ret = 0;
	int reg = 0;

	dev_info(codec->dev, "MONO - built on %s at %s\n",
		__DATE__,
		__TIME__);
	dev_info(codec->dev, "build number %s\n", MAX98505_REVISION);

	max98505->codec = codec;
	codec->control_data = max98505->regmap;

	ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_I2C);
	if (ret != 0) {
		dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
		return ret;
	}

	max98505->sysclk = 12288000;
	max98505->volume = 0x07;

	cdata = &max98505->dai[0];
	cdata->rate = (unsigned)-1;
	cdata->fmt  = (unsigned)-1;

	reg = 0;
	ret = regmap_read(max98505->regmap, MAX98505_R0FF_VERSION, &reg);
	if ((ret < 0) || ((reg != MAX98505_VERSION) && (reg != MAX98505_VERSION1) && (reg != MAX98505_VERSION2))) {
		dev_err(codec->dev,
			"device initialization error (%d 0x%02X)\n",
			ret,
			reg);
		goto err_access;
	}
	dev_info(codec->dev, "device version 0x%02X\n", reg);

#if 0
	/* FOR DEBUGGING ONLY */
	regcache_cache_bypass(max98505->regmap, true);
	dev_info(codec->dev, "regmap cache bypass ENABLED!\n");
	/**********************/
#endif

	regmap_write(max98505->regmap, MAX98505_R038_GLOBAL_ENABLE, 0x00);

	/* It's not the default but we need to set DAI_DLY */
	regmap_write(max98505->regmap, MAX98505_R020_FORMAT, M98505_DAI_DLY_MASK);

	regmap_write(max98505->regmap, MAX98505_R021_TDM_SLOT_SELECT, 0xC8);

	regmap_write(max98505->regmap, MAX98505_R027_DOUT_HIZ_CFG1, 0xFF);
	regmap_write(max98505->regmap, MAX98505_R028_DOUT_HIZ_CFG2, 0xFF);
	regmap_write(max98505->regmap, MAX98505_R029_DOUT_HIZ_CFG3, 0xFF);
	regmap_write(max98505->regmap, MAX98505_R02A_DOUT_HIZ_CFG4, 0xF0);

	regmap_write(max98505->regmap, MAX98505_R02C_FILTERS, 0xD8);

//	regmap_write(max98505->regmap, MAX98505_R034_ALC_CONFIGURATION, 0xF8);
	regmap_write(max98505->regmap, MAX98505_R034_ALC_CONFIGURATION, 0x12);


	/*****************************************************************/
	/* Set boost output to minimum until DSM is implemented          */
	regmap_write(max98505->regmap, MAX98505_R037_CONFIGURATION, 0xF0);
	/*****************************************************************/

	// Disable ALC muting
	regmap_write(max98505->regmap, MAX98505_R03A_BOOST_LIMITER, 0xF8);

	regmap_update_bits(max98505->regmap, MAX98505_R02D_GAIN,
			M98505_DAC_IN_SEL_MASK, M98505_DAC_IN_SEL_DIV2_SUMMED_DAI);

	max98505_handle_pdata(codec);
	max98505_add_widgets(codec);

	ret = sysfs_create_group(&codec->dev->kobj, &maxim_attribute_group);
	if(ret) {
		pr_err("failed to create sysfs group [%d]", ret);
	}
err_access:

	pr_info("%s: exit %d\n", __func__, ret);
	ret = 0;   // temp
	return ret;
}
static int max98505_probe(struct snd_soc_codec *codec)
{
	struct max98505_priv *max98505 = snd_soc_codec_get_drvdata(codec);
	struct max98505_pdata *pdata = max98505->pdata;
	struct max98505_cdata *cdata;
	int ret = 0;
	int reg = 0;

	dev_info(codec->dev, "build number %s\n", MAX98505_REVISION);

	max98505->codec = codec;
	codec->control_data = max98505->regmap;

	ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_I2C);
	if (ret != 0) {
		dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
		return ret;
	}

	max98505->sysclk = pdata->sysclk;
	max98505->volume = pdata->spk_vol;

	cdata = &max98505->dai[0];
	cdata->rate = (unsigned)-1;
	cdata->fmt  = (unsigned)-1;

	reg = 0;
	ret = regmap_read(max98505->regmap, MAX98505_R0FF_VERSION, &reg);
	if ((ret < 0) || ((reg != MAX98505_VERSION)
		&& (reg != MAX98505_VERSION1)
		&& (reg != MAX98505_VERSION2)
		&& (reg != MAX98505_VERSION3))) {
		dev_err(codec->dev,
				"device initialization error (%d 0x%02X)\n",
				ret,
				reg);
		goto err_version;
	}
	msg_maxim("device version 0x%02x", reg);

	regmap_write(max98505->regmap, MAX98505_R038_GLOBAL_ENABLE, 0x00);

	/* It's not the default but we need to set DAI_DLY */
	regmap_write(max98505->regmap, MAX98505_R020_FORMAT,
			MAX98505_DAI_DLY_MASK);

	regmap_write(max98505->regmap, MAX98505_R021_TDM_SLOT_SELECT, 0xC8);

	regmap_write(max98505->regmap, MAX98505_R027_DOUT_HIZ_CFG1, 0xFF);
	regmap_write(max98505->regmap, MAX98505_R028_DOUT_HIZ_CFG2, 0xFF);
	regmap_write(max98505->regmap, MAX98505_R029_DOUT_HIZ_CFG3, 0xFF);
	regmap_write(max98505->regmap, MAX98505_R02A_DOUT_HIZ_CFG4, 0xF0);

	regmap_write(max98505->regmap, MAX98505_R02C_FILTERS, 0xD9);
	regmap_write(max98505->regmap, MAX98505_R034_ALC_CONFIGURATION, 0x12);

	/* Set boost output to maximum */
	regmap_write(max98505->regmap, MAX98505_R037_CONFIGURATION, 0x00);

	/* Disable ALC muting */
	regmap_write(max98505->regmap, MAX98505_R03A_BOOST_LIMITER, 0xF8);

	regmap_update_bits(max98505->regmap,
			MAX98505_R02D_GAIN, MAX98505_DAC_IN_SEL_MASK,
			MAX98505_DAC_IN_SEL_DIV2_SUMMED_DAI);

	/* Enable ADC */
	regmap_update_bits(max98505->regmap,
			MAX98505_R036_BLOCK_ENABLE,
			MAX98505_ADC_VIMON_EN_MASK,
			MAX98505_ADC_VIMON_EN_MASK);
	pdata->vstep.adc_status = 1;

	max98505_set_slave(max98505);
	max98505_handle_pdata(codec);
	max98505_add_widgets(codec);

#if defined(USE_DSM_LOG) || defined(USE_DSM_UPDATE_CAL)
	if (!g_class)
		g_class = class_create(THIS_MODULE, class_name_log);
	max98505->dev_log_class = g_class;
	if (max98505->dev_log_class) {
		max98505->dev_log =
			device_create(max98505->dev_log_class,
					NULL, 1, NULL, "max98505");
		if (IS_ERR(max98505->dev_log)) {
			ret = sysfs_create_group(&codec->dev->kobj,
				&max98505_attribute_group);
			if (ret)
				msg_maxim(
				"failed to create sysfs group [%d]", ret);
		} else {
			ret = sysfs_create_group(&max98505->dev_log->kobj,
				&max98505_attribute_group);
			if (ret)
				msg_maxim(
				"failed to create sysfs group [%d]", ret);
		}
	}
	msg_maxim("g_class=%p %p", g_class, max98505->dev_log_class);
#endif /* USE_DSM_LOG || USE_DSM_UPDATE_CAL */

err_version:
	msg_maxim("exit %d", ret);

	return ret;
}