int adau17x1_probe(struct device *dev, struct regmap *regmap, enum adau17x1_type type, void (*switch_mode)(struct device *dev), const char *firmware_name) { struct adau *adau; if (IS_ERR(regmap)) return PTR_ERR(regmap); adau = devm_kzalloc(dev, sizeof(*adau), GFP_KERNEL); if (!adau) return -ENOMEM; adau->regmap = regmap; adau->switch_mode = switch_mode; adau->type = type; dev_set_drvdata(dev, adau); if (firmware_name) { adau->sigmadsp = devm_sigmadsp_init_regmap(dev, regmap, NULL, firmware_name); if (IS_ERR(adau->sigmadsp)) { dev_warn(dev, "Could not find firmware file: %ld\n", PTR_ERR(adau->sigmadsp)); adau->sigmadsp = NULL; } } if (switch_mode) switch_mode(dev); return 0; }
int adau17x1_probe(struct device *dev, struct regmap *regmap, enum adau17x1_type type, void (*switch_mode)(struct device *dev), const char *firmware_name) { struct adau *adau; int ret; if (IS_ERR(regmap)) return PTR_ERR(regmap); adau = devm_kzalloc(dev, sizeof(*adau), GFP_KERNEL); if (!adau) return -ENOMEM; adau->mclk = devm_clk_get(dev, "mclk"); if (IS_ERR(adau->mclk)) { if (PTR_ERR(adau->mclk) != -ENOENT) return PTR_ERR(adau->mclk); /* Clock is optional (for the driver) */ adau->mclk = NULL; } else if (adau->mclk) { adau->clk_src = ADAU17X1_CLK_SRC_PLL_AUTO; /* * Any valid PLL output rate will work at this point, use one * that is likely to be chosen later as well. The register will * be written when the PLL is powered up for the first time. */ ret = adau_calc_pll_cfg(clk_get_rate(adau->mclk), 48000 * 1024, adau->pll_regs); if (ret < 0) return ret; ret = clk_prepare_enable(adau->mclk); if (ret) return ret; } adau->regmap = regmap; adau->switch_mode = switch_mode; adau->type = type; dev_set_drvdata(dev, adau); if (firmware_name) { adau->sigmadsp = devm_sigmadsp_init_regmap(dev, regmap, NULL, firmware_name); if (IS_ERR(adau->sigmadsp)) { dev_warn(dev, "Could not find firmware file: %ld\n", PTR_ERR(adau->sigmadsp)); adau->sigmadsp = NULL; } } if (switch_mode) switch_mode(dev); return 0; }