Lines Matching +full:codec +full:- +full:gpio6

1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (c) 2018-2020, Intel Corporation
4 // sof-wm8804.c - ASoC machine driver for Up and Up2 board
18 #include <sound/soc-acpi.h>
33 sof_wm8804_quirk = (unsigned long)id->driver_data; in sof_wm8804_quirk_cb()
42 DMI_MATCH(DMI_PRODUCT_NAME, "UP-APL01"),
53 struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); in sof_wm8804_hw_params()
55 struct snd_soc_component *codec = codec_dai->component; in sof_wm8804_hw_params() local
65 if (samplerate == ctx->sample_rate) in sof_wm8804_hw_params()
68 ctx->sample_rate = 0; in sof_wm8804_hw_params()
101 dev_err(rtd->card->dev, in sof_wm8804_hw_params()
103 return -EINVAL; in sof_wm8804_hw_params()
111 if (!(IS_ERR_OR_NULL(ctx->gpio_44) || in sof_wm8804_hw_params()
112 IS_ERR_OR_NULL(ctx->gpio_48))) { in sof_wm8804_hw_params()
118 gpiod_set_value_cansleep(ctx->gpio_48, !clk_44); in sof_wm8804_hw_params()
119 gpiod_set_value_cansleep(ctx->gpio_44, clk_44); in sof_wm8804_hw_params()
121 gpiod_set_value_cansleep(ctx->gpio_44, clk_44); in sof_wm8804_hw_params()
122 gpiod_set_value_cansleep(ctx->gpio_48, !clk_44); in sof_wm8804_hw_params()
129 dev_err(rtd->card->dev, "Failed to set WM8804 PLL\n"); in sof_wm8804_hw_params()
136 dev_err(rtd->card->dev, in sof_wm8804_hw_params()
142 snd_soc_component_update_bits(codec, WM8804_SPDTX4, 0x0f, in sof_wm8804_hw_params()
145 ctx->sample_rate = samplerate; in sof_wm8804_hw_params()
159 DAILINK_COMP_ARRAY(COMP_CODEC("i2c-1AEC8804:00", "wm8804-spdif")));
167 .name = "SSP5-Codec",
177 .name = "wm8804", /* sof- prefix added automatically */
183 /* i2c-<HID>:00 with HID being 8 chars */
199 GPIO_LOOKUP("INT3452:01", 73, "BCM-GPIO5", GPIO_ACTIVE_HIGH),
200 GPIO_LOOKUP("INT3452:01", 74, "BCM-GPIO6", GPIO_ACTIVE_HIGH),
215 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); in sof_wm8804_probe()
217 return -ENOMEM; in sof_wm8804_probe()
219 mach = pdev->dev.platform_data; in sof_wm8804_probe()
221 card->dev = &pdev->dev; in sof_wm8804_probe()
226 up2_gpios_table.dev_id = dev_name(&pdev->dev); in sof_wm8804_probe()
233 * the GPIO as non-optional in sof_wm8804_probe()
236 ctx->gpio_44 = devm_gpiod_get(&pdev->dev, "BCM-GPIO5", in sof_wm8804_probe()
238 if (IS_ERR(ctx->gpio_44)) { in sof_wm8804_probe()
239 ret = PTR_ERR(ctx->gpio_44); in sof_wm8804_probe()
240 dev_err(&pdev->dev, in sof_wm8804_probe()
241 "could not get BCM-GPIO5: %d\n", in sof_wm8804_probe()
246 ctx->gpio_48 = devm_gpiod_get(&pdev->dev, "BCM-GPIO6", in sof_wm8804_probe()
248 if (IS_ERR(ctx->gpio_48)) { in sof_wm8804_probe()
249 ret = PTR_ERR(ctx->gpio_48); in sof_wm8804_probe()
250 dev_err(&pdev->dev, in sof_wm8804_probe()
251 "could not get BCM-GPIO6: %d\n", in sof_wm8804_probe()
257 /* fix index of codec dai */ in sof_wm8804_probe()
259 if (!strcmp(dailink[i].codecs->name, "i2c-1AEC8804:00")) { in sof_wm8804_probe()
265 /* fixup codec name based on HID */ in sof_wm8804_probe()
266 adev = acpi_dev_get_first_match_dev(mach->id, NULL, -1); in sof_wm8804_probe()
269 "%s%s", "i2c-", acpi_dev_name(adev)); in sof_wm8804_probe()
270 dailink[dai_index].codecs->name = codec_name; in sof_wm8804_probe()
272 dev_err(&pdev->dev, "Error cannot find '%s' dev\n", mach->id); in sof_wm8804_probe()
273 return -ENOENT; in sof_wm8804_probe()
280 return devm_snd_soc_register_card(&pdev->dev, card); in sof_wm8804_probe()
291 .name = "sof-wm8804",
300 MODULE_AUTHOR("Pierre-Louis Bossart");
302 MODULE_ALIAS("platform:sof-wm8804");