ssm2518
static int ssm2518_lookup_mcs(struct ssm2518 *ssm2518,
if (sysclks[i] == ssm2518->sysclk)
struct ssm2518 *ssm2518 = snd_soc_component_get_drvdata(component);
mcs = ssm2518_lookup_mcs(ssm2518, rate);
if (ssm2518->right_j) {
ret = regmap_update_bits(ssm2518->regmap, SSM2518_REG_CLOCK,
ret = regmap_update_bits(ssm2518->regmap, SSM2518_REG_SAI_CTRL1,
return regmap_update_bits(ssm2518->regmap, SSM2518_REG_POWER1,
struct ssm2518 *ssm2518 = snd_soc_component_get_drvdata(dai->component);
return regmap_update_bits(ssm2518->regmap, SSM2518_REG_MUTE_CTRL,
struct ssm2518 *ssm2518 = snd_soc_component_get_drvdata(dai->component);
ssm2518->right_j = false;
ssm2518->right_j = true;
ret = regmap_write(ssm2518->regmap, SSM2518_REG_SAI_CTRL1, ctrl1);
return regmap_write(ssm2518->regmap, SSM2518_REG_SAI_CTRL2, ctrl2);
static int ssm2518_set_power(struct ssm2518 *ssm2518, bool enable)
ret = regmap_update_bits(ssm2518->regmap, SSM2518_REG_POWER1,
regcache_mark_dirty(ssm2518->regmap);
if (ssm2518->enable_gpio)
gpiod_set_value_cansleep(ssm2518->enable_gpio, enable);
regcache_cache_only(ssm2518->regmap, !enable);
ret = regmap_update_bits(ssm2518->regmap, SSM2518_REG_POWER1,
regcache_sync(ssm2518->regmap);
struct ssm2518 *ssm2518 = snd_soc_component_get_drvdata(component);
ret = ssm2518_set_power(ssm2518, true);
ret = ssm2518_set_power(ssm2518, false);
struct ssm2518 *ssm2518 = snd_soc_component_get_drvdata(dai->component);
return regmap_update_bits(ssm2518->regmap,
ret = regmap_write(ssm2518->regmap, SSM2518_REG_CHAN_MAP,
ret = regmap_update_bits(ssm2518->regmap, SSM2518_REG_SAI_CTRL1,
return regmap_update_bits(ssm2518->regmap, SSM2518_REG_SAI_CTRL2,
struct ssm2518 *ssm2518 = snd_soc_component_get_drvdata(dai->component);
if (ssm2518->constraints)
SNDRV_PCM_HW_PARAM_RATE, ssm2518->constraints);
struct ssm2518 *ssm2518 = snd_soc_component_get_drvdata(component);
ssm2518->constraints = NULL;
ssm2518->constraints = &ssm2518_constraints_2048000;
ssm2518->constraints = &ssm2518_constraints_2822000;
ssm2518->constraints = &ssm2518_constraints_3072000;
ssm2518->constraints = &ssm2518_constraints_12288000;
ssm2518->sysclk = freq;
return regmap_update_bits(ssm2518->regmap, SSM2518_REG_POWER1,
struct ssm2518 *ssm2518;
ssm2518 = devm_kzalloc(&i2c->dev, sizeof(*ssm2518), GFP_KERNEL);
if (ssm2518 == NULL)
ssm2518->enable_gpio = devm_gpiod_get_optional(&i2c->dev, NULL,
ret = PTR_ERR_OR_ZERO(ssm2518->enable_gpio);
gpiod_set_consumer_name(ssm2518->enable_gpio, "SSM2518 nSD");
i2c_set_clientdata(i2c, ssm2518);
ssm2518->regmap = devm_regmap_init_i2c(i2c, &ssm2518_regmap_config);
if (IS_ERR(ssm2518->regmap))
return PTR_ERR(ssm2518->regmap);
regcache_cache_bypass(ssm2518->regmap, true);
ret = regmap_write(ssm2518->regmap, SSM2518_REG_POWER1,
regcache_cache_bypass(ssm2518->regmap, false);
ret = regmap_update_bits(ssm2518->regmap, SSM2518_REG_POWER2,
ret = ssm2518_set_power(ssm2518, false);