static int wm5102_probe(struct platform_device *pdev) { struct arizona *arizona = dev_get_drvdata(pdev->dev.parent); struct wm5102_priv *wm5102; int i, ret; wm5102 = devm_kzalloc(&pdev->dev, sizeof(struct wm5102_priv), GFP_KERNEL); if (wm5102 == NULL) return -ENOMEM; platform_set_drvdata(pdev, wm5102); wm5102->core.arizona = arizona; wm5102->core.adsp[0].part = "wm5102"; wm5102->core.adsp[0].num = 1; wm5102->core.adsp[0].type = WMFW_ADSP2; wm5102->core.adsp[0].base = ARIZONA_DSP1_CONTROL_1; wm5102->core.adsp[0].dev = arizona->dev; wm5102->core.adsp[0].regmap = arizona->regmap; wm5102->core.adsp[0].mem = wm5102_dsp1_regions; wm5102->core.adsp[0].num_mems = ARRAY_SIZE(wm5102_dsp1_regions); ret = wm_adsp2_init(&wm5102->core.adsp[0], true); if (ret != 0) return ret; for (i = 0; i < ARRAY_SIZE(wm5102->fll); i++) wm5102->fll[i].vco_mult = 1; arizona_init_fll(arizona, 1, ARIZONA_FLL1_CONTROL_1 - 1, ARIZONA_IRQ_FLL1_LOCK, ARIZONA_IRQ_FLL1_CLOCK_OK, &wm5102->fll[0]); arizona_init_fll(arizona, 2, ARIZONA_FLL2_CONTROL_1 - 1, ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK, &wm5102->fll[1]); for (i = 0; i < ARRAY_SIZE(wm5102_dai); i++) arizona_init_dai(&wm5102->core, i); /* Latch volume update bits */ for (i = 0; i < ARRAY_SIZE(wm5102_digital_vu); i++) regmap_update_bits(arizona->regmap, wm5102_digital_vu[i], WM5102_DIG_VU, WM5102_DIG_VU); pm_runtime_enable(&pdev->dev); pm_runtime_idle(&pdev->dev); return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm5102, wm5102_dai, ARRAY_SIZE(wm5102_dai)); }
static int wm8997_probe(struct platform_device *pdev) { struct arizona *arizona = dev_get_drvdata(pdev->dev.parent); struct wm8997_priv *wm8997; int i; wm8997 = devm_kzalloc(&pdev->dev, sizeof(struct wm8997_priv), GFP_KERNEL); if (wm8997 == NULL) return -ENOMEM; platform_set_drvdata(pdev, wm8997); wm8997->core.arizona = arizona; wm8997->core.num_inputs = 4; arizona_init_dvfs(&wm8997->core); for (i = 0; i < ARRAY_SIZE(wm8997->fll); i++) wm8997->fll[i].vco_mult = 1; arizona_init_fll(arizona, 1, ARIZONA_FLL1_CONTROL_1 - 1, ARIZONA_IRQ_FLL1_LOCK, ARIZONA_IRQ_FLL1_CLOCK_OK, &wm8997->fll[0]); arizona_init_fll(arizona, 2, ARIZONA_FLL2_CONTROL_1 - 1, ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK, &wm8997->fll[1]); /* SR2 fixed at 8kHz, SR3 fixed at 16kHz */ regmap_update_bits(arizona->regmap, ARIZONA_SAMPLE_RATE_2, ARIZONA_SAMPLE_RATE_2_MASK, 0x11); regmap_update_bits(arizona->regmap, ARIZONA_SAMPLE_RATE_3, ARIZONA_SAMPLE_RATE_3_MASK, 0x12); for (i = 0; i < ARRAY_SIZE(wm8997_dai); i++) arizona_init_dai(&wm8997->core, i); /* Latch volume update bits */ for (i = 0; i < ARRAY_SIZE(wm8997_digital_vu); i++) regmap_update_bits(arizona->regmap, wm8997_digital_vu[i], WM8997_DIG_VU, WM8997_DIG_VU); pm_runtime_enable(&pdev->dev); pm_runtime_idle(&pdev->dev); return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm8997, wm8997_dai, ARRAY_SIZE(wm8997_dai)); }
static int wm8998_probe(struct platform_device *pdev) { struct arizona *arizona = dev_get_drvdata(pdev->dev.parent); struct wm8998_priv *wm8998; int i; wm8998 = devm_kzalloc(&pdev->dev, sizeof(struct wm8998_priv), GFP_KERNEL); if (!wm8998) return -ENOMEM; platform_set_drvdata(pdev, wm8998); /* Set of_node to parent from the SPI device to allow DAPM to * locate regulator supplies */ pdev->dev.of_node = arizona->dev->of_node; wm8998->core.arizona = arizona; wm8998->core.num_inputs = 3; /* IN1L, IN1R, IN2 */ for (i = 0; i < ARRAY_SIZE(wm8998->fll); i++) wm8998->fll[i].vco_mult = 1; arizona->dcvdd_lp_fmax = 24576000; arizona_init_fll(arizona, 1, ARIZONA_FLL1_CONTROL_1 - 1, ARIZONA_IRQ_FLL1_LOCK, ARIZONA_IRQ_FLL1_CLOCK_OK, &wm8998->fll[0]); arizona_init_fll(arizona, 2, ARIZONA_FLL2_CONTROL_1 - 1, ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK, &wm8998->fll[1]); for (i = 0; i < ARRAY_SIZE(wm8998_dai); i++) arizona_init_dai(&wm8998->core, i); /* Latch volume update bits */ for (i = 0; i < ARRAY_SIZE(wm8998_digital_vu); i++) regmap_update_bits(arizona->regmap, wm8998_digital_vu[i], WM8998_DIG_VU, WM8998_DIG_VU); pm_runtime_enable(&pdev->dev); pm_runtime_idle(&pdev->dev); return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm8998, wm8998_dai, ARRAY_SIZE(wm8998_dai)); }
static int wm5110_probe(struct platform_device *pdev) { struct arizona *arizona = dev_get_drvdata(pdev->dev.parent); struct wm5110_priv *wm5110; int i; wm5110 = devm_kzalloc(&pdev->dev, sizeof(struct wm5110_priv), GFP_KERNEL); if (wm5110 == NULL) return -ENOMEM; platform_set_drvdata(pdev, wm5110); wm5110->core.arizona = arizona; wm5110->core.num_inputs = 8; for (i = 0; i < ARRAY_SIZE(wm5110->fll); i++) wm5110->fll[i].vco_mult = 3; arizona_init_fll(arizona, 1, ARIZONA_FLL1_CONTROL_1 - 1, ARIZONA_IRQ_FLL1_LOCK, ARIZONA_IRQ_FLL1_CLOCK_OK, &wm5110->fll[0]); arizona_init_fll(arizona, 2, ARIZONA_FLL2_CONTROL_1 - 1, ARIZONA_IRQ_FLL2_LOCK, ARIZONA_IRQ_FLL2_CLOCK_OK, &wm5110->fll[1]); for (i = 0; i < ARRAY_SIZE(wm5110_dai); i++) arizona_init_dai(&wm5110->core, i); /* Latch volume update bits */ for (i = 0; i < ARRAY_SIZE(wm5110_digital_vu); i++) regmap_update_bits(arizona->regmap, wm5110_digital_vu[i], WM5110_DIG_VU, WM5110_DIG_VU); pm_runtime_enable(&pdev->dev); pm_runtime_idle(&pdev->dev); return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm5110, wm5110_dai, ARRAY_SIZE(wm5110_dai)); }