brintos

brintos / linux-shallow public Read only

0
0
Text · 1.9 KiB · 1818ce6 Raw
89 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * HD audio interface patch for Creative X-Fi CA0110-IBG chip4 *5 * Copyright (c) 2008 Takashi Iwai <tiwai@suse.de>6 */7 8#include <linux/init.h>9#include <linux/slab.h>10#include <linux/module.h>11#include <sound/core.h>12#include <sound/hda_codec.h>13#include "hda_local.h"14#include "hda_auto_parser.h"15#include "hda_jack.h"16#include "hda_generic.h"17 18 19static const struct hda_codec_ops ca0110_patch_ops = {20	.build_controls = snd_hda_gen_build_controls,21	.build_pcms = snd_hda_gen_build_pcms,22	.init = snd_hda_gen_init,23	.free = snd_hda_gen_free,24	.unsol_event = snd_hda_jack_unsol_event,25};26 27static int ca0110_parse_auto_config(struct hda_codec *codec)28{29	struct hda_gen_spec *spec = codec->spec;30	int err;31 32	err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);33	if (err < 0)34		return err;35	err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);36	if (err < 0)37		return err;38 39	return 0;40}41 42 43static int patch_ca0110(struct hda_codec *codec)44{45	struct hda_gen_spec *spec;46	int err;47 48	spec = kzalloc(sizeof(*spec), GFP_KERNEL);49	if (!spec)50		return -ENOMEM;51	snd_hda_gen_spec_init(spec);52	codec->spec = spec;53	codec->patch_ops = ca0110_patch_ops;54 55	spec->multi_cap_vol = 1;56	codec->bus->core.needs_damn_long_delay = 1;57 58	err = ca0110_parse_auto_config(codec);59	if (err < 0)60		goto error;61 62	return 0;63 64 error:65	snd_hda_gen_free(codec);66	return err;67}68 69 70/*71 * patch entries72 */73static const struct hda_device_id snd_hda_id_ca0110[] = {74	HDA_CODEC_ENTRY(0x1102000a, "CA0110-IBG", patch_ca0110),75	HDA_CODEC_ENTRY(0x1102000b, "CA0110-IBG", patch_ca0110),76	HDA_CODEC_ENTRY(0x1102000d, "SB0880 X-Fi", patch_ca0110),77	{} /* terminator */78};79MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_ca0110);80 81MODULE_LICENSE("GPL");82MODULE_DESCRIPTION("Creative CA0110-IBG HD-audio codec");83 84static struct hda_codec_driver ca0110_driver = {85	.id = snd_hda_id_ca0110,86};87 88module_hda_codec_driver(ca0110_driver);89