wm8400
void wm8400_reset_codec_reg_cache(struct wm8400 *wm8400)
regmap_reinit_cache(wm8400->regmap, &wm8400_regmap_config);
struct wm8400 *wm8400;
wm8400 = devm_kzalloc(&i2c->dev, sizeof(struct wm8400), GFP_KERNEL);
if (!wm8400)
wm8400->regmap = devm_regmap_init_i2c(i2c, &wm8400_regmap_config);
if (IS_ERR(wm8400->regmap))
return PTR_ERR(wm8400->regmap);
wm8400->dev = &i2c->dev;
i2c_set_clientdata(i2c, wm8400);
return wm8400_init(wm8400, dev_get_platdata(&i2c->dev));
static int wm8400_register_codec(struct wm8400 *wm8400)
.platform_data = wm8400,
.pdata_size = sizeof(*wm8400),
return devm_mfd_add_devices(wm8400->dev, -1, &cell, 1, NULL, 0, NULL);
static int wm8400_init(struct wm8400 *wm8400,
ret = regmap_read(wm8400->regmap, WM8400_RESET_ID, ®);
dev_err(wm8400->dev, "Chip ID register read failed\n");
dev_err(wm8400->dev, "Device is not a WM8400, ID is %x\n",
ret = regmap_read(wm8400->regmap, WM8400_ID, ®);
dev_err(wm8400->dev, "ID register read failed: %d\n", ret);
dev_info(wm8400->dev, "WM8400 revision %x\n", reg);
ret = wm8400_register_codec(wm8400);
dev_err(wm8400->dev, "Failed to register codec\n");
ret = pdata->platform_init(wm8400->dev);
dev_err(wm8400->dev, "Platform init failed: %d\n",
dev_warn(wm8400->dev, "No platform initialisation supplied\n");
struct wm8400 *wm8400 = container_of(pdev, struct wm8400, regulators[pdev->id]);
config.driver_data = wm8400;
config.regmap = wm8400->regmap;
struct wm8400 *wm8400 = dev_get_drvdata(dev);
if (wm8400->regulators[reg].name)
initdata->driver_data = wm8400;
wm8400->regulators[reg].name = "wm8400-regulator";
wm8400->regulators[reg].id = reg;
wm8400->regulators[reg].dev.parent = dev;
wm8400->regulators[reg].dev.platform_data = initdata;
return platform_device_register(&wm8400->regulators[reg]);
struct wm8400;
void wm8400_reset_codec_reg_cache(struct wm8400 *wm8400);
struct wm8400_priv *wm8400 = snd_soc_component_get_drvdata(component);
dev_err(wm8400->wm8400->dev,
struct wm8400 *wm8400 = dev_get_platdata(component->dev);
snd_soc_component_init_regmap(component, wm8400->regmap);
priv->wm8400 = wm8400;
ret = devm_regulator_bulk_get(wm8400->dev,
struct wm8400_priv *wm8400 = snd_soc_component_get_drvdata(component);
dev_warn(wm8400->wm8400->dev,
dev_warn(wm8400->wm8400->dev,
dev_warn(wm8400->wm8400->dev,
dev_warn(wm8400->wm8400->dev,
struct wm8400 *wm8400;
struct wm8400_priv *wm8400 = snd_soc_component_get_drvdata(component);
wm8400_reset_codec_reg_cache(wm8400->wm8400);
struct wm8400_priv *wm8400 = snd_soc_component_get_drvdata(component);
wm8400->sysclk = freq;
static int fll_factors(struct wm8400_priv *wm8400, struct fll_factors *factors,
dev_err(wm8400->wm8400->dev,
dev_err(wm8400->wm8400->dev,
dev_dbg(wm8400->wm8400->dev,
struct wm8400_priv *wm8400 = snd_soc_component_get_drvdata(component);
if (freq_in == wm8400->fll_in && freq_out == wm8400->fll_out)
ret = fll_factors(wm8400, &factors, freq_in, freq_out);
wm8400->fll_out = freq_out;
wm8400->fll_in = freq_in;