cregit-Linux how code gets into the kernel

Release 4.13 sound/core/ctljack.c

Directory: sound/core
/*
 * Helper functions for jack-detection kcontrols
 *
 * Copyright (c) 2011 Takashi Iwai <tiwai@suse.de>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the Free
 * Software Foundation; either version 2 of the License, or (at your option)
 * any later version.
 */

#include <linux/kernel.h>
#include <linux/export.h>
#include <sound/core.h>
#include <sound/control.h>


#define jack_detect_kctl_info	snd_ctl_boolean_mono_info


static int jack_detect_kctl_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { ucontrol->value.integer.value[0] = kcontrol->private_value; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Takashi Iwai34100.00%1100.00%
Total34100.00%1100.00%

static const struct snd_kcontrol_new jack_detect_kctl = { /* name is filled later */ .iface = SNDRV_CTL_ELEM_IFACE_CARD, .access = SNDRV_CTL_ELEM_ACCESS_READ, .info = jack_detect_kctl_info, .get = jack_detect_kctl_get, };
static int get_available_index(struct snd_card *card, const char *name) { struct snd_ctl_elem_id sid; memset(&sid, 0, sizeof(sid)); sid.index = 0; sid.iface = SNDRV_CTL_ELEM_IFACE_CARD; strlcpy(sid.name, name, sizeof(sid.name)); while (snd_ctl_find_id(card, &sid)) { sid.index++; /* reset numid; otherwise snd_ctl_find_id() hits this again */ sid.numid = 0; } return sid.index; }

Contributors

PersonTokensPropCommitsCommitProp
Jie Yang8190.00%150.00%
Takashi Iwai910.00%150.00%
Total90100.00%2100.00%


static void jack_kctl_name_gen(char *name, const char *src_name, int size) { size_t count = strlen(src_name); bool need_cat = true; /* remove redundant " Jack" from src_name */ if (count >= 5) need_cat = strncmp(&src_name[count - 5], " Jack", 5) ? true : false; snprintf(name, size, need_cat ? "%s Jack" : "%s", src_name); }

Contributors

PersonTokensPropCommitsCommitProp
Jie Yang74100.00%1100.00%
Total74100.00%1100.00%


struct snd_kcontrol * snd_kctl_jack_new(const char *name, struct snd_card *card) { struct snd_kcontrol *kctl; kctl = snd_ctl_new1(&jack_detect_kctl, NULL); if (!kctl) return NULL; jack_kctl_name_gen(kctl->id.name, name, sizeof(kctl->id.name)); kctl->id.index = get_available_index(card, kctl->id.name); kctl->private_value = 0; return kctl; }

Contributors

PersonTokensPropCommitsCommitProp
Takashi Iwai7283.72%250.00%
Jie Yang1416.28%250.00%
Total86100.00%4100.00%


void snd_kctl_jack_report(struct snd_card *card, struct snd_kcontrol *kctl, bool status) { if (kctl->private_value == status) return; kctl->private_value = status; snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id); }

Contributors

PersonTokensPropCommitsCommitProp
Takashi Iwai45100.00%1100.00%
Total45100.00%1100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Takashi Iwai20554.67%457.14%
Jie Yang16945.07%228.57%
Bhumika Goyal10.27%114.29%
Total375100.00%7100.00%
Directory: sound/core
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.