static int max98505_i2c_probe(struct i2c_client *i2c_l,
			     const struct i2c_device_id *id)
{
	struct max98505_priv *max98505;
	int ret;

	pr_info("%s: enter, device '%s'\n", __func__, id->name);

#ifdef SUPPORT_DEVICE_TREE
	max98505_regulator_config(i2c_l, of_property_read_bool(i2c_l->dev.of_node,
			"max98505,i2c-pull-up"), 1);
#endif

	max98505 = kzalloc(sizeof(struct max98505_priv), GFP_KERNEL);
	if (max98505 == NULL)
		return -ENOMEM;

	max98505->devtype = id->driver_data;
	i2c_set_clientdata(i2c_l, max98505);
	max98505->control_data = i2c_l;
	max98505->pdata = i2c_l->dev.platform_data;

	max98505->regmap = regmap_init_i2c(i2c_l, &max98505_regmap);
	if (IS_ERR(max98505->regmap)) {
		ret = PTR_ERR(max98505->regmap);
		dev_err(&i2c_l->dev, "Failed to allocate regmap: %d\n", ret);
		goto err_out;
	}

	ret = snd_soc_register_codec(&i2c_l->dev, &soc_codec_dev_max98505,
			max98505_dai, ARRAY_SIZE(max98505_dai));

err_out:

	if (ret < 0) {
		if (max98505->regmap)
			regmap_exit(max98505->regmap);
		kfree(max98505);
	}
	dsm_misc_device_init();
	pr_info("%s: ret %d\n", __func__, ret);

	return ret;
}
static int __init max98504_init(void)
{
	int ret;

	msg_maxim("%s\n", __func__);

	ret = i2c_add_driver(&max98504_i2c_driver);
	if (ret)
		pr_err("Failed to register MAX98504 I2C driver: %d\n", ret);
	else
		pr_info("MAX98504 driver built on %s at %s\n",
			__DATE__,
			__TIME__);

#ifdef USE_MISC_FOR_DEMO
	dsm_misc_device_init();
#endif
	return ret;
}