Index: intel8x0m.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/intel8x0m.c,v retrieving revision 1.28 diff -r1.28 intel8x0m.c 36a37 > #include 37a39 > #include 283a286,300 > static int snd_intel8x0m_switch_default_get(snd_kcontrol_t *kcontrol, > snd_ctl_elem_value_t *ucontrol); > static int snd_intel8x0m_switch_default_put(snd_kcontrol_t *kcontrol, > snd_ctl_elem_value_t *ucontrol); > static int snd_intel8x0m_switch_default_info(snd_kcontrol_t *kcontrol, > snd_ctl_elem_info_t *uinfo); > > static snd_kcontrol_new_t snd_intel8x0m_mixer_switches[] __devinitdata = { > { .name = "Off-hook Switch", > .iface = SNDRV_CTL_ELEM_IFACE_MIXER, > .info = snd_intel8x0m_switch_default_info, > .get = snd_intel8x0m_switch_default_get, > .put = snd_intel8x0m_switch_default_put > } > }; 286a304,339 > static int snd_intel8x0m_switch_default_info(snd_kcontrol_t *kcontrol, > snd_ctl_elem_info_t *uinfo) > { > uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; > uinfo->count = 1; > uinfo->value.integer.min = 0; > uinfo->value.integer.max = 1; > return 0; > } > > static int snd_intel8x0m_switch_default_get(snd_kcontrol_t *kcontrol, > snd_ctl_elem_value_t *ucontrol) > { > intel8x0_t *chip = snd_kcontrol_chip(kcontrol); > unsigned int status; > spin_lock_irq(&chip->reg_lock); > status = snd_ac97_read(chip->ac97,AC97_GPIO_STATUS)&AC97_GPIO_LINE1_OH?1:0; > spin_unlock_irq(&chip->reg_lock); > ucontrol->value.integer.value[0] = status; > return 0; > } > static int snd_intel8x0m_switch_default_put(snd_kcontrol_t *kcontrol, > snd_ctl_elem_value_t *ucontrol) > { > intel8x0_t *chip = snd_kcontrol_chip(kcontrol); > unsigned short new_status = ucontrol->value.integer.value[0]?AC97_GPIO_LINE1_OH:~AC97_GPIO_LINE1_OH; > int ret; > //unsigned short status = snd_ac97_read(chip->ac97,AC97_GPIO_STATUS)&AC97_GPIO_LINE1_OH; > spin_lock_irq(&chip->reg_lock); > snd_printk("Writing status: %04x\n",new_status); > ret = snd_ac97_update_bits(chip->ac97,AC97_GPIO_STATUS, > AC97_GPIO_LINE1_OH, new_status); > spin_unlock_irq(&chip->reg_lock); > return ret; > //return 0; > } 544a598 > unsigned int ring = 0; 566a621,624 > > //status = igetdword(chip,ICHREG(GLOB_STA)); > //ring = ((status=snd_ac97_read(chip->ac97,AC97_GPIO_STATUS))&(1<<5))?1:0; > //if(status != 0xffff) snd_printk("s: %08x\n",status); 640a699 > unsigned short regv; 646,647c705,707 < snd_ac97_update_bits(ichdev->ac97, AC97_GPIO_STATUS, < AC97_GPIO_LINE1_OH, AC97_GPIO_LINE1_OH); --- > //snd_ac97_update_bits(ichdev->ac97, AC97_GPIO_STATUS, > // AC97_GPIO_LINE1_OH, AC97_GPIO_LINE1_OH); > //snd_ac97_update_bits(ichdev->ac97,AC97_GPIO_STATUS,0x40,0x40); 650,651c710,712 < snd_ac97_update_bits(ichdev->ac97, AC97_GPIO_STATUS, < AC97_GPIO_LINE1_OH, ~AC97_GPIO_LINE1_OH); --- > //snd_ac97_update_bits(ichdev->ac97, AC97_GPIO_STATUS, > // AC97_GPIO_LINE1_OH, ~AC97_GPIO_LINE1_OH); > //snd_ac97_update_bits(ichdev->ac97,AC97_GPIO_STATUS,0x40,~0x40); 892a954 > unsigned int idx; 927a990,993 > for(idx = 0; idx < ARRAY_SIZE(snd_intel8x0m_mixer_switches); idx++) { > if((err = snd_ctl_add(chip->card,snd_ctl_new1(&snd_intel8x0m_mixer_switches[idx],chip))) <0 ) > goto __err; > }