ALSA: pcxhr - add support for gpio ports and minor bug fix
- add support for gpio ports (2 GPI, 2 GPO) of pcxhr stereo cards - minor bugfixes : allow setting clock to internal by the mixer even if there is no stream (but monitoring) Signed-off-by: Markus Bollinger <bollinger@digigram.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Цей коміт міститься в:

зафіксовано
Takashi Iwai

джерело
1de9e8e70f
коміт
55aef45085
@@ -1334,6 +1334,40 @@ static void pcxhr_proc_sync(struct snd_info_entry *entry,
|
||||
snd_iprintf(buffer, "\n");
|
||||
}
|
||||
|
||||
static void pcxhr_proc_gpio_read(struct snd_info_entry *entry,
|
||||
struct snd_info_buffer *buffer)
|
||||
{
|
||||
struct snd_pcxhr *chip = entry->private_data;
|
||||
struct pcxhr_mgr *mgr = chip->mgr;
|
||||
/* commands available when embedded DSP is running */
|
||||
if (mgr->dsp_loaded & (1 << PCXHR_FIRMWARE_DSP_MAIN_INDEX)) {
|
||||
/* gpio ports on stereo boards only available */
|
||||
int value = 0;
|
||||
hr222_read_gpio(mgr, 1, &value); /* GPI */
|
||||
snd_iprintf(buffer, "GPI: 0x%x\n", value);
|
||||
hr222_read_gpio(mgr, 0, &value); /* GP0 */
|
||||
snd_iprintf(buffer, "GPO: 0x%x\n", value);
|
||||
} else
|
||||
snd_iprintf(buffer, "no firmware loaded\n");
|
||||
snd_iprintf(buffer, "\n");
|
||||
}
|
||||
static void pcxhr_proc_gpo_write(struct snd_info_entry *entry,
|
||||
struct snd_info_buffer *buffer)
|
||||
{
|
||||
struct snd_pcxhr *chip = entry->private_data;
|
||||
struct pcxhr_mgr *mgr = chip->mgr;
|
||||
char line[64];
|
||||
int value;
|
||||
/* commands available when embedded DSP is running */
|
||||
if (!(mgr->dsp_loaded & (1 << PCXHR_FIRMWARE_DSP_MAIN_INDEX)))
|
||||
return;
|
||||
while (!snd_info_get_line(buffer, line, sizeof(line))) {
|
||||
if (sscanf(line, "GPO: 0x%x", &value) != 1)
|
||||
continue;
|
||||
hr222_write_gpo(mgr, value); /* GP0 */
|
||||
}
|
||||
}
|
||||
|
||||
static void __devinit pcxhr_proc_init(struct snd_pcxhr *chip)
|
||||
{
|
||||
struct snd_info_entry *entry;
|
||||
@@ -1342,6 +1376,13 @@ static void __devinit pcxhr_proc_init(struct snd_pcxhr *chip)
|
||||
snd_info_set_text_ops(entry, chip, pcxhr_proc_info);
|
||||
if (! snd_card_proc_new(chip->card, "sync", &entry))
|
||||
snd_info_set_text_ops(entry, chip, pcxhr_proc_sync);
|
||||
/* gpio available on stereo sound cards only */
|
||||
if (chip->mgr->is_hr_stereo &&
|
||||
!snd_card_proc_new(chip->card, "gpio", &entry)) {
|
||||
snd_info_set_text_ops(entry, chip, pcxhr_proc_gpio_read);
|
||||
entry->c.text.write = pcxhr_proc_gpo_write;
|
||||
entry->mode |= S_IWUSR;
|
||||
}
|
||||
}
|
||||
/* end of proc interface */
|
||||
|
||||
|
Посилання в новій задачі
Заблокувати користувача